'''
iter：对象需要提供next方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,终止迭代.
注意：list dic tuple string 并不是迭代器,它们只是可迭代对象.但是可以通过iter(list)的方法
将它们转换为迭代器.
判断一个对象是否是迭代器isinstance(f,Iterator)

所有的iterable都可以通过内置函数iter()转换为iterator
迭代器的优点:省内存.它是一种通过延时创建的方式生成一个序列,只有在需要的时候才被创建.
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问结束,只能往前不能后退
迭代器有两个基本的方法:iter,text方法
内置函数iter(),next(),本质上都是用的对象的iter()和next()方法.
'''
#方式1
l  = iter("jids")
# try:
#     for i in range(9):
#         print(next(l))
# except StopIteration:
#         print("发生异常")
# else:
#     print("(成功执行)执行中...")
# finally:
#     print("执行结束")

#方法2：自定义一个迭代器
class Container:
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def __iter__(self):
        print("调用了 __iter__(self) 方法")
        return self  # 返回迭代器对象本身
    def __next__(self):

        if self.start < self.end:
            i = self.start
            self.start = self.start + 1
            return i
        else:
            raise StopIteration
Cont = iter(Container(0, 10))
for i in Cont:
    print(i)

